//package com.qiaofang.ftpapplication.util;
//
//import org.apache.commons.net.ftp.FTPClient;
//import org.apache.commons.net.ftp.FTPReply;
//import org.apache.tomcat.util.http.fileupload.IOUtils;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//
//import java.io.*;
//import java.net.SocketException;
//
///**
// * https://blog.csdn.net/qq_35170213/article/details/80284730
// * 中文文件名的支持
// */
//public class FtpUtil2{
//    private static Logger logger = LoggerFactory.getLogger(FtpUtil2.class);
//
//    /**
//     * FTP上传单个文件测试
//     */
//    public static void uploadFtpFile(String hostname,
//                                     Integer port,
//                                     String username,
//                                     String password,String filePath,String ftpWorkPath) throws Exception{
//
//        long start = System.currentTimeMillis();
//        if(port == null){
//            port = FTPClient.DEFAULT_PORT;
//        }
//        FTPClient ftpClient =getFTPClient(hostname,port,username,password);
//        FileInputStream fis = null;
//        try {
//            File srcFile = new File(filePath);
//            String fileName = srcFile.getName();
//            logger.info("uploadFtpFile fileName:"+fileName);
//
//            fis = new FileInputStream(srcFile);
//
//            //设置上传目录
//            //ftpClient.changeWorkingDirectory("/"+ftpWorkPath);
//            ftpClient.changeWorkingDirectory("/" );
//            ftpClient.setBufferSize(1024 * 1024 * 4);//默认缓冲区10m
//
//            ftpClient.setControlEncoding("GBK");
//
//
//            //设置为被动模式
//            ftpClient.enterLocalPassiveMode();
//
//            //设置文件类型（二进制）
//            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//
//
//            //上传中文名称
//            fileName = new String(fileName.getBytes("GBK"),"iso-8859-1");
//
//            ftpClient.storeFile(fileName, fis);
//            System.out.println("all cost time :"+(System.currentTimeMillis()-start));
//            logger.info("已上传至FTP服务器路径0");
//        } catch (IOException e) {
//            e.printStackTrace();
//            throw new RuntimeException("FTP客户端出错！", e);
//        } finally {
//            IOUtils.closeQuietly(fis);
//            try {
//                ftpClient.disconnect();
//            } catch (IOException e) {
//                e.printStackTrace();
//                throw new RuntimeException("关闭FTP连接发生异常！", e);
//            }
//            logger.info("已上传至FTP服务器路径！");
//        }
//    }
//
//
//    *
//     * 获取FTPClient对象
//     *
//     * @param ftpHost
//     *            FTP主机服务器
//     * @param ftpPassword
//     *            FTP 登录密码
//     * @param ftpUserName
//     *            FTP登录用户名
//     * @param ftpPort
//     *            FTP端口 默认为21
//     * @return
//    public static FTPClient getFTPClient(String ftpHost,int ftpPort, String ftpUserName,
//                                         String ftpPassword) throws RuntimeException{
//        FTPClient ftpClient = new FTPClient();/**/
//        try {
//            ftpClient = new FTPClient();
//            long start0 = System.currentTimeMillis();
//            ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
//            System.out.println("connect time:"+(System.currentTimeMillis()-start0));
//            //连接成功后的回应码
//            System.out.println(ftpClient.getReplyCode());
//
//
//            ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
//            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
//                logger.info("未连接到FTP，用户名或密码错误。");
//                ftpClient.disconnect();
//            } else {
//                logger.info("FTP连接成功。");
//            }
//        } catch (SocketException e) {
//            e.printStackTrace();
//            logger.info("FTP的IP地址可能错误，请正确配置。");
//            throw new RuntimeException("FTP的IP地址可能错误，请正确配置！", e);
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.info("FTP的端口错误,请正确配置。");
//            throw new RuntimeException("FTP的端口错误,请正确配置！", e);
//        }
//        return ftpClient;
//    }
//
//    /**
//     * 从FTP服务器下载文件
//     * @param ftpHost FTP IP地址
//     * @param ftpUserName FTP 用户名
//     * @param ftpPassword FTP用户名密码
//     * @param ftpPort FTP端口
//     * @param ftpPath FTP服务器中文件所在路径 格式： ftptest/aa
//     * @param localPath 下载到本地的位置 格式：H:/download
//     * @param fileName 文件名称
//     */
//    public static boolean downloadFtpFile(String ftpHost, String ftpUserName,
//                                          String ftpPassword, int ftpPort, String ftpPath, String localPath,
//                                          String fileName) throws RuntimeException{
//        boolean flag = false;
//        FTPClient ftpClient = null;
//
//        try {
//            ftpClient = getFTPClient(ftpHost,ftpPort, ftpUserName, ftpPassword);
//            ftpClient.setControlEncoding("UTF-8"); // 中文支持
//            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//            ftpClient.enterLocalPassiveMode();
//            ftpClient.changeWorkingDirectory(ftpPath);
//
//            File localFile = new File(localPath + File.separatorChar + fileName);
//            OutputStream os = new FileOutputStream(localFile);
//            ftpClient.retrieveFile(fileName, os);
//            os.close();
//            ftpClient.logout();
//            flag = true;
//        } catch (FileNotFoundException e) {
//            logger.error("没有找到" + ftpPath + "文件");
//            e.printStackTrace();
//            throw new RuntimeException("没有找到" + ftpPath + "文件:", e);
//        } catch (SocketException e) {
//            logger.error("连接FTP失败.");
//            e.printStackTrace();
//            throw new RuntimeException("连接FTP失败:", e);
//        } catch (IOException e) {
//            e.printStackTrace();
//            logger.error("文件读取错误。");
//            e.printStackTrace();
//            throw new RuntimeException("文件读取错误:", e);
//        }
//        return flag;
//    }
//
//    public static void main(String[] args) {
//        //下载
////		FavFTPUtil.downloadFtpFile("192.168.2.133","adks","adconcepts2017",
////				"fileConllect/test","E:\\xcc", "53840afe-0682-4960-84ef-3f3b972a0f12.zip");
//        try {
//            uploadFtpFile("192.168.1.180", null,"ftptest", "eqrepxIDbj$NOYjOJ!rzuTX3XE",
//                    "E:\\xianghe.bak",
//                    "test/");
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//}
